package sk.nociar.jpacloner.graphs; import java.util.Collection; import java.util.HashSet; import java.util.Set; public final class Multi extends GraphExplorer { private final GraphExplorer child; public Multi(GraphExplorer child) { this.child = child; } @Override public Set<?> explore(Collection<?> entities, EntityExplorer entityExplorer) { Set<Object> explored = new HashSet<Object>(); Set<?> next = new HashSet<Object>(entities); do { next = child.explore(next, entityExplorer); // remove already explored entities (optimization & prevention of cycles) next.removeAll(explored); explored.addAll(next); } while (!next.isEmpty()); return explored; } }